Date		:	29 et 30 mai 1991
		Protection	:	MOT DE PASSE
		Programme	:       DRAKKHEN
		Outils		:	SOFT-ICE V2.50a 
		Fichier		:	DRAKE.CC1 et DRAKC.CC1
		Temps pass�	:	8 HEURES
		Soci�t�		:	INFOGRAMES
		Divers	        :	
		Origine		:	INDONESIE - SOLO
		Num�ro		:	078


	Je commence par le fichier TATOU.COM avant de me rendre compte
	8 heures plus tard que j'avais fait fausse route....

	En 1B1B:0E26 on trouve une case m�moire dans laquelle on ne met
	pas '1' si le mot de passe est �ronn�. 
	Un saut JZ ( en 0E24 ) transform� en JNZ force un 1 dans cette position.
	
	1B1B:0E17	9A3500FE27	CALL 27FE:0035	( appel d'un  overlay )
	1B1B:0E1C	83C406		ADD SP,+06
	1B1B:0E1F	A39818		MOV [1898],AX
	1B1B:0E22	0BC0		OR AX,AX
	1B1B:0E24	7407		JZ 0E2D
	1B1B:0E26	C746F20100	MOV WORD [BP-0E],0001
	1B1B:0E2B	EB3B		JMP 0E68

	Cette routine est cod�e ( �videmment ), je place SOFT-ICE en BPM
	� l'adresse 1B1B:0E24 en �criture avec 74.
	Il s'arr�te de suite � l'adresse 0C07:08A4;

	0C07:08A4 F3A4	REPZ MOVSB
	0C07:08A6 59	POP CX
	0C07:08A7 8BC1  MOV AX,CX
	0C07:08A9 0BC3  OR AX,BX
	0C07:08AB 75BE  JNZ 086B

	L'id�e me vient de dessassembler avec SOURCER, de modifier et de
	r�assembler. SOURCER avec comme TARGET MASM 5.1 et 9 passes arrive
	sans probl�me � ses fins. Un test rapide de r�assemblage et un essai
	montre que cel� se plante !

	MASM TATOU.ASM donne 0 errors, bien.
	LINK TATOU.OBJ donne le message " WARNING NO STACK SEGMENT "

	Le probl�me c'est que maintenant nous avons un fichier EXE au lieu
	d'un COM. Il existe pourtant une solution c'est d'utiliser l'utilitaire
	EXE2BIN fourni en standart par le DOS et de transformer l'EXE en COM.
	En fait il transforme en fichier BIN qu'il suffit de renomer *.COM et
	l� �a marche parfaitement.

	J'ajoute donc dans le fichier SOURCE l'instruction;

	 MOV BYTE PTR ES:[0054],75     ( 6 octets ) et je r�assemble.

	Je fais un essai mais le SOFT se plante....
	Je relance SOFT-ICE mais avec le LOADER pour faire du pas � pas
	dans TATOU.COM d�s la premi�re instruction, et que vois-je ? Je vous
	le donne en mille; c'est un programme qui se modifie lui-m�me !!!
	Des MOV CS:[xxx] sont largement utilis�s....
	Donc interdiction de rallonger le programme ne serait-ce d'un octet.
	Je vais revenir � la fa�on classique style FINAL-ORBIT et 4DBOXING.

	Apr�s de longs et p�nibles essais j'arrive � ins�rer un JMP apr�s la
	routine de codage, ( en 0C07:08A7 ) � trouver une zone texte que je peux
	utiliser en zone CODE et � y placer une instruction qui incr�mente mon
	74 d�s qu'il se pr�sente, puis � resauter ( en ayant execut� les deux
	instructions que j'ai du d�placer ) apr�s mon JMP pour continuer le
	d�roulement normal ( en 0C07:08AB ).
	Et le soft fonctionne bien sans mot de passe mais se plante au bout d'un
	temps variant de 30 secondes � une minute.
	Avec SOFT-ICE j'arrive � trouver que le programme tourne dans une
	seule instruction qui saute sur elle-m�me style :

	loc1 JMP loc1

	Ces quelques octets sont en clair dans les fichiers DRAKE.CC1 mais une
	fois remplac�s par des NOP font apparaitre des INVALID INSTRUCTION qui
	plantent SOFT-ICE et le jeu lorsqu'il est lanc� seul. Donc retour � la
	case d�part.
	Je suis pr�t � abandonner, mais je ne suis pas encore all� au bout de
	toutes les solutions possibles et notamment celle qui consiste � prendre
	le probl�me l�g�rement en amont et de voir "CE" qui influe sur mon
	fameux saut que j'essaie depuis 8 heures d'inverser.

	Donc je repars � l'envers � partir de mon saut JZ en 0E24;
	C'est le r�sultat d'un OR AX,AX diff�rent de zero qui switche correcte-
	ment mon saut. Dans mon cas avec une r�ponse fausse AX contient zero.
	Il faut donc continuer � remonter pour savoir ce qui influence AX.
	La prochaine instruction rencontr�e est un MOV de AX dans une position
	m�moire, donc rien � voir si ce n'est que cette position m�moire doit
	contenir forc�ment quelque chose qui est different de zero !

	Ensuite vient une addition sur le pointeur de pile, donc l� aussi aucune
	influence sur AX. Il ne reste plus que le CALL inter-segments. Comme
	TATOU.COM est un COM ! cel� ne peut signifier qu'une chose; on saute
	dans un overlay de TATOU.COM, la suite me donnera raison puisqu'il
	s'agit des programmes DRAKC.CC1 pour la version CGA et DRAKE.CC1 pour la
	version EGA.
	Dans ce CALL on teste les 4 caract�res entr�s lors de la demande du
	mot de passe et d�s qu'un seul est mauvais on sort en faisant un 
	XOR AX,AX ! ( on remet donc AX � zero ) nous y voil�.... 
	
	D�tail du CALL 27FE:0035

	27FE:0061 	750D	JNZ	0070		Si pas = on saute � 70	
						        ( � 70 on XOR AX,AX ! )
	27FE:0063	47
	27FE:0064	4A
	27FE:0065	E2F4	LOOP	005B		On tourne 4 fois.
	27FE:0067	B80200	MOV  AX,0002		Et ici on met 2 dans AX.
	27FE:006A		POP
	    .			.
	    .			.
	27FE:006F	CB	RETF			Et retour avec 2 dans AX
	27FE:0070		XOR AX,AX               Ici on place 0 dans AX.
	    .		        POP
	    .			.
	    .		CB	RETF			Et retour avec 0 dans AX
			

	De plus cette routine �tant dans les 2 overlays, elle est en clair !
	Il suffit de faire sauter le saut en 67 au lieu de 70 et le tour est
	jou�. Ce qui revient � remplacer 0D par 04. Et dire que j'aurais pu
	avoir cette id�e 8 heures moins le quart plus t�t ! ( heureusement que
	j'aime �a... )

	Avec PCTOOLS placer en SL 222 et DEP 287 un 04 dans le fichier DRAKC.CC1
	( cga ) et SL 224 DEP 436 dans le fichier DRAKE.CC1 ( ega ) .
	
	FREDDY